/* 接口
 *
 * @link: https://www.runoob.com/go/go-interfaces.html
 */

// 包申明
package main

// 引入包
import (
	"fmt"
)

/*
Go 语言提供了另外一种数据类型即接口，它把所有的具有共性的方法定义在一起，任何其他类型只要实现了这些方法就是实现了这个接口。
*/

// 定义一个结构体 为接口方式
type Phone interface {
	call()
}

// 定义一个结构
type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
	fmt.Println("I am Nokia, I can call you!")
}

type IPhone struct {
}

func (iPhone IPhone) call() {
	fmt.Println("I am iPhone, I can call you!")
}

// 入口函数
func main() {
	var phone Phone
	phone = new(NokiaPhone)
	phone.call()

	phone = new(IPhone)
	phone.call()
}

/*
运行结果:
I am Nokia, I can call you!
I am iPhone, I can call you!
*/
